package com.office.system.service.impl;

import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.office.system.mapper.SysReportMapper;
import com.office.system.domain.SysReport;
import com.office.system.service.ISysReportService;
import com.office.system.mapper.SysReportTemplateMapper;
import com.office.system.domain.SysReportTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.office.common.utils.DateUtils;

/**
 * 报告Service业务层处理
 */
@Service
public class SysReportServiceImpl implements ISysReportService {
    private static final Logger log = LoggerFactory.getLogger(SysReportServiceImpl.class);

    @Autowired
    private SysReportMapper sysReportMapper;

    @Autowired
    private SysReportTemplateMapper sysReportTemplateMapper;

    /**
     * 查询报告
     *
     * @param reportId 报告主键
     * @return 报告
     */
    @Override
    public SysReport selectSysReportByReportId(Long reportId) {
        return sysReportMapper.selectSysReportByReportId(reportId);
    }

    /**
     * 查询报告列表
     *
     * @param sysReport 报告
     * @return 报告
     */
    @Override
    public List<SysReport> selectSysReportList(SysReport sysReport) {
        return sysReportMapper.selectSysReportList(sysReport);
    }

    /**
     * 新增报告
     *
     * @param sysReport 报告
     * @return 结果
     */
    @Override
    public int insertSysReport(SysReport sysReport) {
        sysReport.setCreateTime(DateUtils.getNowDate());
        return sysReportMapper.insertSysReport(sysReport);
    }

    /**
     * 修改报告
     *
     * @param sysReport 报告
     * @return 结果
     */
    @Override
    public int updateSysReport(SysReport sysReport) {
        sysReport.setUpdateTime(DateUtils.getNowDate());
        return sysReportMapper.updateSysReport(sysReport);
    }

    /**
     * 批量删除报告
     *
     * @param reportIds 需要删除的报告主键
     * @return 结果
     */
    @Override
    public int deleteSysReportByReportIds(Long[] reportIds) {
        return sysReportMapper.deleteSysReportByReportIds(reportIds);
    }

    /**
     * 删除报告信息
     *
     * @param reportId 报告主键
     * @return 结果
     */
    @Override
    public int deleteSysReportByReportId(Long reportId) {
        return sysReportMapper.deleteSysReportByReportId(reportId);
    }

    /**
     * 生成报告
     *
     * @param templateId 模板ID
     * @param reportType 报告类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param materials 素材内容
     * @return 生成的报告内容
     */
    @Override
    public String generateReport(Long templateId, String reportType, String startDate, String endDate, Map<String, Object> materials) {
        log.info("开始生成报告，参数：templateId={}, reportType={}, startDate={}, endDate={}", 
            templateId, reportType, startDate, endDate);

        // 获取模板内容
        SysReportTemplate template = sysReportTemplateMapper.selectSysReportTemplateByTemplateId(templateId);
        if (template == null) {
            log.error("模板不存在：templateId={}", templateId);
            throw new RuntimeException("模板不存在");
        }
        log.info("获取到模板：{}", template.getTemplateName());

        // 获取素材内容
        if (materials == null) {
            materials = new HashMap<>();
        }

        List<Map<String, Object>> autoMaterials = (List<Map<String, Object>>) materials.get("auto");
        if (autoMaterials == null) {
            autoMaterials = new ArrayList<>();
        }

        String manualContent = (String) materials.get("manual");
        if (manualContent == null) {
            manualContent = "";
        }

        // 构建报告内容
        StringBuilder reportContent = new StringBuilder();
        
        // 添加标题
        String title = reportType.equals("weekly") ? "周报" : "月报";
        reportContent.append("# ").append(title).append("\n\n");

        // 添加日期范围
        reportContent.append("## 报告期间\n");
        reportContent.append("- 开始日期：").append(startDate != null ? startDate : "未设置").append("\n");
        reportContent.append("- 结束日期：").append(endDate != null ? endDate : "未设置").append("\n\n");

        // 添加自动收集的素材
        // 清空，不添加任何内容

        // 添加手动输入的内容
        if (!manualContent.trim().isEmpty()) {
            reportContent.append("## 手动输入内容\n");
            reportContent.append(manualContent).append("\n\n");
        }

        // 添加模板中的其他部分
        String templateContent = template.getContent();
        if (templateContent != null && !templateContent.trim().isEmpty()) {
            reportContent.append(templateContent);
        }

        String finalContent = reportContent.toString();
        log.info("报告生成完成，内容长度：{}", finalContent.length());
        return finalContent;
    }
}
